package com.comprehensive.common.enumType;

/**
 * 数据类型枚举
 * 定义系统支持的各类数据资源类型
 */
public enum DataTypeEnum {
    /**
     * 电影
     */
    MOVIE(1, "MOVIE", "电影"),
    
    /**
     * 电视剧
     */
    TV_SERIES(2, "TV_SERIES", "电视剧"),
    
    /**
     * 动漫
     */
    ANIME(3, "ANIME", "动漫"),
    
    /**
     * 综艺
     */
    VARIETY_SHOW(4, "VARIETY_SHOW", "综艺"),
    
    /**
     * 短剧
     */
    SHORT_PLAY(5, "SHORT_PLAY", "短剧"),
    
    /**
     * 音乐
     */
    MUSIC(6, "MUSIC", "音乐"),
    
    /**
     * 小说
     */
    NOVEL(7, "NOVEL", "小说"),
    
    /**
     * 应用
     */
    APPLICATION(8, "APPLICATION", "应用");

    private final int value;
    private final String code;
    private final String description;

    /**
     * 构造函数
     * @param value 数据类型的数值
     * @param code 数据类型的编码
     * @param description 数据类型的中文描述
     */
    DataTypeEnum(int value, String code, String description) {
        this.value = value;
        this.code = code;
        this.description = description;
    }

    /**
     * 根据编码获取数据类型
     * @param code 编码
     * @return 数据类型枚举
     */
    public static DataTypeEnum fromCode(String code) {
        for (DataTypeEnum dataType : DataTypeEnum.values()) {
            if (dataType.getCode().equalsIgnoreCase(code)) {
                return dataType;
            }
        }
        throw new IllegalArgumentException("Invalid data type code: " + code);
    }

    /**
     * 根据数值获取数据类型
     * @param value 数值
     * @return 数据类型枚举
     */
    public static DataTypeEnum fromValue(int value) {
        for (DataTypeEnum dataType : DataTypeEnum.values()) {
            if (dataType.getValue() == value) {
                return dataType;
            }
        }
        throw new IllegalArgumentException("Invalid data type value: " + value);
    }

    /**
     * 获取数据类型数值
     * @return 数值
     */
    public int getValue() {
        return value;
    }

    /**
     * 获取数据类型编码
     * @return 编码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取数据类型描述
     * @return 中文描述
     */
    public String getDescription() {
        return description;
    }
}